﻿// 图形库学习.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include<graphics.h>
//#include<atlstr.h>
#include<time.h>
#include<string>
#include<conio.h>
#include <Windows.h>
#include "psapi.h"  //

#include <tlhelp32.h> //获取进程函数的头文件
#include <cstdio>

#include<Mmsystem.h>
#pragma comment(lib,"winmm.lib")
using namespace std;
#define TH32CS_SNAPPROCESS  0x00000002
/*void renewfileName(char* fileName, int fileNo)
{
	sprintf_s(fileName,50, "%s%d%s", "tu\\tu( ", fileNo, ").txt");//包含在《stdio》里     %s%d%s:输入格式是一个字符串和一个整数和一个字符串
}*/
int isexit = 0;
// 线程回调函数
//参数：程序名称
DWORD WINAPI ThreadCheckProc(LPVOID lParam) //LPVOID是个没有类型的指针
{
	STARTUPINFOA si = { sizeof(si) };
	PROCESS_INFORMATION pi = { 0 };
	HANDLE hMutex;
	//while (true) {
	hMutex = OpenMutexA(MUTEX_ALL_ACCESS, FALSE, (LPCSTR)lParam);
	if (!hMutex) {
		//unicode下，用W版会失败
		CreateProcessA(
			(LPCSTR)lParam,  //指向新进程要使用的可执行文件的名称
			NULL,            //传给新进程的命令行字符串
			NULL, NULL,
			FALSE,
			CREATE_NEW_CONSOLE,
			NULL, NULL,
			&si, &pi);
		WaitForSingleObject(pi.hProcess, INFINITE);// 等待直到1子进程退出
		 //WaitForSingleObject()函数检查对象的状态，如果是未确定的则等待至超时 
		CloseHandle(pi.hProcess);  //关闭进程和句柄
		CloseHandle(pi.hThread);	
	}
	else {
		CloseHandle(hMutex);
	}
	Sleep(500);
	//}
	return 0;
}
DWORD WINAPI Thread(LPVOID lpParam)
{
	time_t nowtime;
	struct tm* p;//创建一个新时间结构体指针 p 

	/*由于此时变量nowtime中的系统时间值为日历时间，我们需要调用本地时间函数localtime_s(tm* p,&nowtime);
	将nowtime变量中的日历时间转化为本地时间，
	存入到指针为p的时间结构体中。不改的话，可以参照注意事项手动改。*/
	int hour, min, second;
	char num[3];
	LOGFONT f;
	gettextstyle(&f);						// 获取当前字体设置
	f.lfHeight = 48;						// 设置字体高度为 48
	_tcscpy_s(f.lfFaceName, _T("黑体"));		// 设置字体为“黑体”(高版本 VC 推荐使用 _tcscpy_s 函数)
	f.lfQuality = ANTIALIASED_QUALITY;		// 设置输出效果为抗锯齿  
	settextstyle(&f);						// 设置字体样式
	setbkmode(TRANSPARENT);
	while (1)
	{
		p = new tm;
		time(&nowtime);//使用该函数就可得到当前系统时间，使用该函数需要将传入time_t类型变量nowtime的地址值
		localtime_s(p, &nowtime);
		hour = p->tm_hour;
		min = p->tm_min;
		second = p->tm_sec;
		settextcolor(WHITE);
		sprintf_s(num, "%d", hour);
		outtextxy(1000, 680, num);
		outtextxy(1050, 680, ":");
		sprintf_s(num, "%d", min);
		outtextxy(1100, 680, num);
		outtextxy(1150, 680, ":");
		sprintf_s(num, "%d", second);
		outtextxy(1200, 680, num);
		Sleep(200);
		IMAGE image1;
		loadimage(&image1, _T("其他栏.png"), 280, 40);
		putimage(1000, 680, &image1);
		if (isexit == 1)
		{
			//ExitThread();
			return 0;
		}

	}
}
DWORD GetProcessidFromName(LPCTSTR name)
{
	PROCESSENTRY32 pe;
	DWORD id = 0;
	HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	pe.dwSize = sizeof(PROCESSENTRY32);
	if (!Process32First(hSnapshot, &pe))
		return 0;
	while (1)
	{
		pe.dwSize = sizeof(PROCESSENTRY32);
		if (Process32Next(hSnapshot, &pe) == FALSE)
			break;
		if (strcmp(pe.szExeFile, name) == 0)
		{
			id = pe.th32ProcessID;

			break;
		}
	}
	CloseHandle(hSnapshot);
	return id;
}

int main()
{
	initgraph(1280, 720);

	IMAGE image1;
	loadimage(&image1, _T("开机.png"), 1280, 720);  //多个空格都不行
	putimage(0, 0, &image1);
	// _getch();
	// Sleep(2000);
	MOUSEMSG m;		// 定义鼠标消息
	DWORD Tid;
	while (true)
	{
		// 获取一条鼠标消息
		m = GetMouseMsg();

		if (m.uMsg == WM_LBUTTONDOWN)
			if (m.x > 400 && m.x <= 900)
				if (m.y >= 300 && m.y <= 700)
				{
					//CreateThread(NULL, 0, ThreadCheckProc, (LPVOID*)"小飞机.exe", 0, &Tid);
					break;
				}
		
	}

	char s[10];
	char s1[10] = "123456";
	loadimage(&image1, _T("空白.png"), 1280, 720);
	putimage(0, 0, &image1);
	while (1)
	{
		InputBox(s, 10, "请输入密码", "密码", NULL);
		if (strcmp(s, s1) == 0)
			break;
		setbkcolor(WHITE);//设置背景色
		setbkmode(OPAQUE);//设置以背景色为背景输出字体
		settextcolor(BLUE);//设置字体的颜色为蓝色
		outtextxy(560, 320, "密码错误，请重新输入");
		Sleep(500);
	}
	//多个空格都不行

	clock_t starttime, finishtime;
	starttime = clock();
	while (1)
	{
		loadimage(&image1, _T("加载1.png"), 640, 360);   //多个空格都不行
		putimage(360, 180, &image1);
		Sleep(400);
		loadimage(&image1, _T("加载2.png"), 640, 360);   //多个空格都不行
		putimage(360, 180, &image1);
		Sleep(400);
		loadimage(&image1, _T("加载3.png"), 640, 360);   //多个空格都不行
		putimage(360, 180, &image1);
		Sleep(400);
		loadimage(&image1, _T("加载4.png"), 640, 360);   //多个空格都不行
		putimage(360, 180, &image1);
		Sleep(400);
		finishtime = clock();
		if (finishtime - starttime >= 2000)
			break;
	}
	loadimage(&image1, _T("空白.png"), 1280, 720);
	putimage(0, 0, &image1);
	Sleep(500);
	loadimage(&image1, _T("桌面.jpg"), 1280, 720);
	putimage(0, 0, &image1);
	loadimage(&image1, _T("关机的地方.png"), 57, 55);
	putimage(0, 665, &image1);
	loadimage(&image1, _T("其他栏.png"), 1223, 55);
	putimage(57, 665, &image1);
	//MOUSEMSG m;

	loadimage(&image1, _T("任务管理器底下.png"),57,55);
	putimage(57, 665, &image1);
	loadimage(&image1, _T("聊天室图片底下.png"), 57, 55);
	putimage(120, 665, &image1);
	loadimage(&image1, _T("飞机底下.jpg"), 57, 55);
	putimage(180, 665, &image1);
	CreateThread(NULL, 0, Thread, NULL, 0, &Tid);


	
	while (true)
	{
		m = GetMouseMsg();
		if (m.uMsg == WM_LBUTTONDOWN)
		{
			if (m.x >= 120 && m.x <= 177)
				if (m.y >= 665)
					CreateThread(NULL, 0, ThreadCheckProc, (LPVOID*)"ChatClient\\Debug\\ChatClient.exe", 0, &Tid);
			if (m.x >= 180 && m.x <= 240)
				if (m.y >= 665)
					CreateThread(NULL, 0, ThreadCheckProc, (LPVOID*)"小飞机\\小飞机\\小飞机.exe", 0, &Tid);
			if (m.x >= 60 && m.x <= 120)
				if (m.y >= 665)
					CreateThread(NULL, 0, ThreadCheckProc, (LPVOID*)"MyTask.exe", 0, &Tid);
			if (m.x <= 60)
				if (m.y >= 665)
				{
					isexit = 1;
					if(GetProcessidFromName("小飞机.exe")!=0)
					system("taskkill    /F   /IM  小飞机.exe");
					if (GetProcessidFromName("ChatClient.exe") != 0)
					system("taskkill    /F   /IM  ChatClient.exe");
					if (GetProcessidFromName("MyTask.exe") != 0)
					system("taskkill    /F   /IM  MyTask.exe");
					PlaySound("おやすみ - Falcom Sound Team jdk.wav", NULL, SND_FILENAME | SND_ASYNC);
					break;
				}

		}

	}

	loadimage(&image1, _T("空白.png"), 1280, 720);
	putimage(0, 0, &image1);
	starttime = clock();
	while (1)
	{
		loadimage(&image1, _T("1.jpg"),1280, 720);   //多个空格都不行
		putimage(0, 0, &image1);
		Sleep(300);
		loadimage(&image1, _T("2.jpg"), 1280, 720);   //多个空格都不行
		putimage(0, 0, &image1);
		Sleep(300);
		loadimage(&image1, _T("3.jpg"), 1280, 720);   //多个空格都不行
		putimage(0, 0, &image1);
		Sleep(300);
		loadimage(&image1, _T("4.jpg"), 1280, 720);   //多个空格都不行
		putimage(0, 0, &image1);
		Sleep(300);
		loadimage(&image1, _T("5.jpg"), 12800, 720);   //多个空格都不行
		putimage(0, 0, &image1);
		//Sleep(300);
		finishtime = clock();
		if (finishtime - starttime >= 10000)
			break;
	}

	 closegraph();
}



// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
